binary-heap-plus 0.1.6

Enhanced version of std::collections::BinaryHeap that supports max, min, and custom-order heaps.
Documentation

binary-heap-plus-rs

Build Status Build status

Enhancement over Rust's std::collections::BinaryHeap.

It supports the following features and still maintains backward compatibility.

  • Max heap
  • Min heap
  • Heap ordered by closure
  • Heap ordered by key generated by closure

You can change the line

use std::collections::BinaryHeap;

to like below.

use binary_heap_plus::*;

Your code will compile as before unless you use unstable APIs.

This crate requires Rust 1.26 or later.

Added muthods

BinaryHeap::new_xxx()

  • (original) ::new() // creates a max heap
  • ::new_min() // creates a min heap
  • ::new_by(f) // creates a heap ordered by the given closure f
  • ::new_by_key(g) // creates a heap ordered by key generated by the given closure g

BinaryHeap::with_capacity_xxx()

  • (original) ::with_capacity(n) // creates a max heap with capacity n
  • ::with_capacity_min(n) // creates a min heap with capacity n
  • ::with_capacity_by(n, f) // creates a heap with capacity n, ordered by the given closure f
  • ::with_capacity_by_key(n, g) // creates a heap with capacity n, ordered by key generated by the given closure g

BinaryHeap::from_vec()

Currently, the From<Vec<T>> trait is implemented for max heap only. If you add generic impl for other heaps, the existing code breaks, requires slight modification such as type annotation.

To maintain good compatibility with std version, ::from_vec() method was added for the same purpose.

Changes

v0.1.6

  • Add generic constructor from_vec() and from_vec_cmp().
  • Refactor other ctor to call above methods.

v0.1.5

  • Add serde1 feature which adds Serialize/Deserialize

v0.1.4

  • Merge #1) Do not require T: Ord when a custom comparator is provided

v0.1.3

  • Add comprehensive CI based on trust CI template v0.1.2
  • README.md tweaks.

v0.1.2

  • Cargo.toml tweaks

Thanks

  • I received many valuable feedback from Pre-RFC thread [1].
    • The current design is based on @ExpHP's suggestion that compiles on stable compiler.
    • DDOtten, steven099, CAD97, ExpHP, scottmcm, Nemo157 and gnzlbg, thanks for looking into the design!
  • @ulysseB sent me a first pull request!
  • @inesseq contributed feature serde1.

References

See the following discussions for the background of the crate: